#ifndef __HAVE_ACTORS
#define __HAVE_ACTORS

#include "renderer.h"
#include "spritesheet.h"
#include "constants.h"

struct Tile
{
    int x;
    int y;
    Tile(int _x=0, int _y=0):x(_x),y(_y)
    {}
    Tile& operator=(const Tile& other)
    {
        x = other.x;
        y = other.y;
        return *this;
    }
    bool operator==(const Tile& other)
    {
        return x == other.x && y == other.y;
    }
    // Factory
    static Tile get_by_coordinates(int x, int y);
};

class Actor
{
protected:
    // Координати (duh)
    int x;
    int y;
public:
    // Променливи за управление на движението.
    int dir;
    int desired_dir;
    float last_move_at;
    int moves_per_second;
    int pixels_per_move;
    
    // Променливи за управление на анимацията.
    // За момента анимацията е от по 2 кадъра.
    Spritesheet * sprites;
    // Кои спрайтове използва героят(например червен призрак, уплашен призрак...)
    int current_spriteset;
    // На колко хода на героя се сменя картинката му.
    int moves_per_sprite;
    int current_frame, current_move;
    
    Actor(int, int, Spritesheet *, int);
    Tile get_tile();
    void set_direction(const int);
    // Това се вика когато Актьор попадне в задънена улица.
    virtual void roadblock_callback() = 0;
    void move();
    void set_spriteset(int new_set);
    void draw(SDL_Surface *);
};

#endif
